<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>组合继承方式</title>
</head>
<body>
    <script>
        // 组合继承方式：使用原型链继承原型上的属性和方法，使用构造函数继承实例属性
        function Parent(name) {
            this.name = name;
            this.colors = ['red', 'green', 'yellow', 'blue'];
        };

        // 在Parent的原型上设置了sayName属性，属性值是一个函数
        Parent.prototype.sayName = function() {
            console.log(this.name);
        };

        function Child(name, age) {
            // 继承父类的属性（构造函数继承）
            Parent.call(this, name);
            // 这是子类自己的属性
            this.age = age;  
        };

        // 继承父类方法（原型链继承）
        Child.prototype = new Parent();

        Child.prototype.sayAge = function() {
            console.log(this.age);
        };

        let c1 = new Child('Katrina', 18);
        c1.colors.push('pink');
        console.log(c1.colors);  // ['red', 'green', 'yellow', 'blue', 'pink']
        c1.sayAge();     // 18
        c1.sayName();    // 'Katrina'
    </script>
</body>
</html>